﻿Imports System.Data.SqlClient
Imports UTNComputers.clsPresupuesto
Imports UTNComputers.clsPresupuesto_Detalle
Imports UTNComputers.daoPresupuesto_Detalle
Imports UTNComputers.clsCliente
Imports UTNComputers.daoCliente
Imports UTNComputers.clsEmpleado
Imports UTNComputers.daoEmpleado

Public Class daoPresupuesto
    'Funcion para el alta  de Presupuesto'
    Public Function Alta(ByVal Presupuesto As clsPresupuesto) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_ALTA_PRESUPUESTO"

            Cm.Parameters.Add("@presu_id", SqlDbType.Int)
            Cm.Parameters.Add("@cli_id", SqlDbType.Int)
            Cm.Parameters.Add("@presu_fecha", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@emp_id", SqlDbType.Int)
            Cm.Parameters.Add("@presu_importe", SqlDbType.Decimal)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@presu_id").Value = Presupuesto.Presu_Id
            Cm.Parameters("@cli_id").Value = Presupuesto.Cli_Id
            Cm.Parameters("@presu_fecha").Value = Presupuesto.Presu_Fecha
            Cm.Parameters("@emp_id").Value = Presupuesto.Emp_id
            Cm.Parameters("@presu_importe").Value = Presupuesto.Presu_Importe
            Cm.Parameters("@Cod_Suc").Value = Presupuesto.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para la modificacion de Presupuestos'
    Public Function Modificar(ByVal Presupuesto As clsPresupuesto) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_MODI_PRESUPUESTO"

            Cm.Parameters.Add("@presu_id", SqlDbType.Int)
            Cm.Parameters.Add("@cli_id", SqlDbType.Int)
            Cm.Parameters.Add("@presu_fecha", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@emp_id", SqlDbType.Int)
            Cm.Parameters.Add("@presu_importe", SqlDbType.Decimal)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@presu_id").Value = Presupuesto.Presu_Id
            Cm.Parameters("@cli_id").Value = Presupuesto.Cli_Id
            Cm.Parameters("@presu_fechao").Value = Presupuesto.Presu_Fecha
            Cm.Parameters("@emp_id").Value = Presupuesto.Emp_id
            Cm.Parameters("@presu_importe").Value = Presupuesto.Presu_Importe
            Cm.Parameters("@emp_id").Value = Presupuesto.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer un Presupuesto por ID'
    Public Function TraePresupuesto(ByVal presu_id As Integer) As clsPresupuesto
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Presupuesto As New clsPresupuesto()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_PRESUPUESTO"

            Cm.Parameters.Add("@presu_id", SqlDbType.Int)
            Cm.Parameters("@presu_id").Value = presu_id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Presupuesto.Presu_Id = Dr.GetInt32(0)
                    If Dr.IsDBNull(1) Then
                        Presupuesto.Cli_Id = 0
                    Else
                        Presupuesto.Cli_Id = Dr.GetInt32(1)
                    End If
                    Presupuesto.Presu_Fecha = Dr.GetDateTime(2)
                    Presupuesto.Emp_id = Dr.GetInt32(3)
                    Presupuesto.Presu_Importe = Dr.GetDecimal(4)
                    Presupuesto.Cod_Suc = Dr.GetInt32(5)

                    Dim Empleado_Dao As New daoEmpleado()
                    Presupuesto.Empleado = Empleado_Dao.TraeEmpleado(Presupuesto.Emp_id)
                    Empleado_Dao.Dispose()

                    Dim Cliente_Dao As New daoCliente()
                    Presupuesto.Cliente = Cliente_Dao.TraeCliente(Presupuesto.Cli_Id)
                    Cliente_Dao.Dispose()

                    Dim ListaDetalle_Presu As New List(Of clsPresupuesto_Detalle)
                    Dim Detalle_Presu_Dao As New daoPresupuesto_Detalle()
                    ListaDetalle_Presu = Detalle_Presu_Dao.TraeDetallesPresupuesto(Presupuesto.Presu_Id)
                    Presupuesto.Detalle = ListaDetalle_Presu
                    Detalle_Presu_Dao.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return Presupuesto
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todas los Presupuestos por Rango de Fecha'
    Public Function TraePresupuestos(ByVal fec_Desde As Date, ByVal fec_Hasta As Date) As List(Of clsPresupuesto)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaPresupuesto As New List(Of clsPresupuesto)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_PRESUPUESTO_X_FECHA"

            Cm.Parameters.Add("@fecha_desde", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@fecha_hasta", SqlDbType.SmallDateTime)
            Cm.Parameters("@fecha_desde").Value = fec_Desde
            Cm.Parameters("@fecha_hasta").Value = fec_Hasta
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Presupuesto As New clsPresupuesto()
                    Presupuesto.Presu_Id = Dr.GetInt32(0)
                    Presupuesto.Cli_Id = Dr.GetInt32(1)
                    Presupuesto.Presu_Fecha = Dr.GetDateTime(2)
                    Presupuesto.Emp_id = Dr.GetInt32(3)
                    Presupuesto.Presu_Importe = Dr.GetDecimal(4)
                    Presupuesto.Cod_Suc = Dr.GetInt32(5)

                    Dim Empleado_Dao As New daoEmpleado()
                    Presupuesto.Empleado = Empleado_Dao.TraeEmpleado(Presupuesto.Emp_id)
                    Empleado_Dao.Dispose()

                    Dim Cliente_Dao As New daoCliente()
                    Presupuesto.Cliente = Cliente_Dao.TraeCliente(Presupuesto.Cli_Id)
                    Cliente_Dao.Dispose()

                    Dim ListaDetalle_Presu As New List(Of clsPresupuesto_Detalle)
                    Dim Detalle_Presu_Dao As New daoPresupuesto_Detalle()
                    ListaDetalle_Presu = Detalle_Presu_Dao.TraeDetallesPresupuesto(Presupuesto.Presu_Id)
                    Presupuesto.Detalle = ListaDetalle_Presu
                    Detalle_Presu_Dao.Dispose()

                    ListaPresupuesto.Add(Presupuesto)
                    Presupuesto.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaPresupuesto
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los Presupuestos por Cliente'
    Public Function TraePresupuestos(ByVal Cliente As clsCliente) As List(Of clsPresupuesto)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaPresupuesto As New List(Of clsPresupuesto)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_PRESUPUESTO_X_CLIENTE"

            Cm.Parameters.Add("@cli_id", SqlDbType.Int)
            Cm.Parameters("@cli_id").Value = Cliente.Cli_Id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Presupuesto As New clsPresupuesto()
                    Presupuesto.Presu_Id = Dr.GetInt32(0)
                    Presupuesto.Cli_Id = Dr.GetInt32(1)
                    Presupuesto.Presu_Fecha = Dr.GetDateTime(2)
                    Presupuesto.Emp_id = Dr.GetInt32(3)
                    Presupuesto.Presu_Importe = Dr.GetDecimal(4)
                    Presupuesto.Cod_Suc = Dr.GetInt32(5)

                    Dim Empleado_Dao As New daoEmpleado()
                    Presupuesto.Empleado = Empleado_Dao.TraeEmpleado(Presupuesto.Emp_id)
                    Empleado_Dao.Dispose()

                    Dim Cliente_Dao As New daoCliente()
                    Presupuesto.Cliente = Cliente_Dao.TraeCliente(Presupuesto.Cli_Id)
                    Cliente_Dao.Dispose()

                    Dim ListaDetalle_Presu As New List(Of clsPresupuesto_Detalle)
                    Dim Detalle_Presu_Dao As New daoPresupuesto_Detalle()
                    ListaDetalle_Presu = Detalle_Presu_Dao.TraeDetallesPresupuesto(Presupuesto.Presu_Id)
                    Presupuesto.Detalle = ListaDetalle_Presu
                    Detalle_Presu_Dao.Dispose()

                    ListaPresupuesto.Add(Presupuesto)
                    Presupuesto.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaPresupuesto
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los Presupuestos por Empleado'
    Public Function TraePresupuestos(ByVal Empleado As clsEmpleado) As List(Of clsPresupuesto)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaPresupuesto As New List(Of clsPresupuesto)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_PRESUPUESTO_X_EMPLEADO"

            Cm.Parameters.Add("@emp_id", SqlDbType.Int)
            Cm.Parameters("@emp_id").Value = Empleado.Emp_Id
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Presupuesto As New clsPresupuesto()
                    Presupuesto.Presu_Id = Dr.GetInt32(0)
                    Presupuesto.Cli_Id = Dr.GetInt32(1)
                    Presupuesto.Presu_Fecha = Dr.GetDateTime(2)
                    Presupuesto.Emp_id = Dr.GetInt32(3)
                    Presupuesto.Presu_Importe = Dr.GetDecimal(4)
                    Presupuesto.Cod_Suc = Dr.GetInt32(5)

                    Dim Empleado_Dao As New daoEmpleado()
                    Presupuesto.Empleado = Empleado_Dao.TraeEmpleado(Presupuesto.Emp_id)
                    Empleado_Dao.Dispose()

                    Dim Cliente_Dao As New daoCliente()
                    Presupuesto.Cliente = Cliente_Dao.TraeCliente(Presupuesto.Cli_Id)
                    Cliente_Dao.Dispose()

                    Dim ListaDetalle_Presu As New List(Of clsPresupuesto_Detalle)
                    Dim Detalle_Presu_Dao As New daoPresupuesto_Detalle()
                    ListaDetalle_Presu = Detalle_Presu_Dao.TraeDetallesPresupuesto(Presupuesto.Presu_Id)
                    Presupuesto.Detalle = ListaDetalle_Presu
                    Detalle_Presu_Dao.Dispose()

                    ListaPresupuesto.Add(Presupuesto)
                    Presupuesto.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaPresupuesto
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    
    '---------------------------------------------------------------------
    ' Constructor de la Clase
    '---------------------------------------------------------------------
    Public Sub New()

        MyBase.New()

    End Sub

    '---------------------------------------------------------------------
    ' Destructor de la Clase
    '---------------------------------------------------------------------
    Public Sub Dispose()

        MyBase.Finalize()

    End Sub

End Class
